package com.redsoil.house.utils;

import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;

import com.blankj.utilcode.util.DeviceUtils;
import com.blankj.utilcode.util.EncodeUtils;
import com.blankj.utilcode.util.NetworkUtils;

import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * 作者：weidingqiang on 2017/9/18 16:21
 * 邮箱：dqwei@iflytek.com
 */

public class EnglishUtil {

    /**
     * 判断手机号是否符合规范
     *
     * @param phoneNo 输入的手机号
     * @return
     */
    public static boolean isPhoneNumber(String phoneNo) {
        if (TextUtils.isEmpty(phoneNo)) {
            return false;
        }
        if (phoneNo.length() == 11) {
            for (int i = 0; i < 11; i++) {
                if (!PhoneNumberUtils.isISODigit(phoneNo.charAt(i))) {
                    return false;
                }
            }
            Pattern p = Pattern.compile("^((13[^4,\\D])" + "|(134[^9,\\D])" +
                    "|(14[5,7])" +
                    "|(15[^4,\\D])" +
                    "|(17[3,6-8])" +
                    "|(18[0-9]))\\d{8}$");
            Matcher m = p.matcher(phoneNo);
            return m.matches();
        }
        return false;
    }

    /**
     * 验证密码
     * 1) 密码控制只能输入字母、数字、特殊符号(~!@#$%^&*()_+[]{}|\;:'",./<>?)
     * 2) 长度 8-14 位，必须包括字母、数字、特殊符号中的2种
     */
    public static boolean CheckPassword(String pwd) {
//        判断密码是否包含数字：包含返回1，不包含返回0
        int i = pwd.matches(".*\\d+.*") ? 1 : 0;

//        判断密码是否包含字母：包含返回1，不包含返回0
        int j = pwd.matches(".*[a-zA-Z]+.*") ? 1 : 0;

//        判断密码是否包含特殊符号(~!@#$%^&*()_+|<>,.?/:;'[]{}\)：包含返回1，不包含返回0
        int k = pwd.matches(".*[~!@#$%^&*()_+|<>,.?/:;'\\[\\]{}\"]+.*") ? 1 : 0;

//        判断密码长度是否在6-16位
        int l = pwd.length();

//        判断密码中是否包含用户名
//        boolean contains = newPwd.contains(pwd);

//        if (i + j + k < 2 || l < 6 || l > 16 || contains) {
//　　          return Password error;
//        }

        if (k == 1) {
            return false;
        }

        if (i + j < 2 || l < 8 || l > 14) {
            return false;
        } else {
            return true;
        }
    }

    public static String encodePhoneBase64(String phone) {

        String base64 = EncodeUtils.base64Encode2String(phone.getBytes());


//        "android_10.4.5.6_oem1311122"
//        NetworkUtils.getIPAddress(true)
        //    DeviceUtils.getAndroidID()


        return encodePhone(base64);
    }

    public static String getPhoneDetails() {


//        "android_10.4.5.6_oem1311122"
//
        //    DeviceUtils.getAndroidID()


        return "android_" + NetworkUtils.getIPAddress(true) + "_" + DeviceUtils.getAndroidID();
    }

    /**
     * base64 码 加入算法 并且加密
     *
     * @param enPhoneData base64转换码
     * @return
     */
    private static String encodePhone(String enPhoneData) {
        //MTg2MjI5Mjk2NjU=
//    	enPhoneData ="MTg2MjI5Mjk2NjU=";
        int len = enPhoneData.length();
        int radNum = getNum(9);

        String subLeft = enPhoneData.substring(0, len - 1);
        String subRight = enPhoneData.substring(len - 1, len);
        String subEnd = String.valueOf(radNum);

        String sz_All_Str = subLeft + subEnd + subRight;

        String zfSubLeft = sz_All_Str.substring(0, radNum);
        String zfSubRight = sz_All_Str.substring(radNum, sz_All_Str.length());
        String zfStr = getRandomString(1);

        String zf_All_Str = zfSubLeft + zfStr + zfSubRight;

//    	System.out.println("radNum:"+radNum);
//    	System.out.println("subLeft:"+subLeft);
//    	System.out.println("subRight:"+subRight);
//    	System.out.println("sz_all_str:"+sz_All_Str);
//
//    	System.out.println("zfSubLeft:"+zfSubLeft);
//    	System.out.println("zfSubRight:"+zfSubRight);
//    	System.out.println("zfStr:"+zfStr);
//
//    	System.out.println("zf_All_Str:"+zf_All_Str);

        return zf_All_Str;
    }

    /**
     * 获得生成随机位数
     *
     * @param maxNum
     * @return
     */
    private static int getNum(int maxNum) {
        return (int) (1 + Math.random() * (maxNum - 1 + 1));
    }

    /**
     * 获取随机插入的字符
     *
     * @param length
     * @return
     */
    private static String getRandomString(int length) { // length 字符串长度
        StringBuffer buffer = new StringBuffer("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@#$%^&*()_+:<>");
        StringBuffer sb = new StringBuffer();
        Random r = new Random();
        int range = buffer.length();
        for (int i = 0; i < length; i++) {
            sb.append(buffer.charAt(r.nextInt(range)));
        }
        return sb.toString();

    }

}
